<?php

namespace Inscripcion\Controller\Service;

use Inscripcion\Controller\Service\GenericService;
use Inscripcion\Model\Entity\MateriaCursar;
use Zend\Db\Adapter\Adapter;
use Componentes\Controller\UtilsArrayController;
use Transaccion\Controller\Service\DatosAcademicosService;
use Transaccion\Controller\Service\PensumService;
use Transaccion\Controller\Service\SemestreService;
use Inscripcion\Controller\Service\MateriaCursarService;

//SERVICIO
class MateriaCursarService extends GenericService {

    /**
     * @var Zend\Db\Adapter\Adapter 
     */
    private $dbAdapter;
    private static $materiaCursarService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    /**
     * 
     * @param type $adapter
     * @return Instancia de MateriaCursarService
     * Patron singleton
     */
    public static function getInstance($adapter) {
        if (self::$materiaCursarService == null) {
            self::$materiaCursarService = new MateriaCursarService($adapter);
        }
        return self::$materiaCursarService;
    }

    public function getMateriaCursarDao() {
        return \Inscripcion\Model\Dao\MateriaCursarDAO::getInstance($this->dbAdapter);
    }

    /**
     * @param type $id
     * @return type
     */
    public function getMateriasCursar($id) {
        $result = $this->getMateriaCursarDao()->getMateriasCursar($id);
        return $result;
    }

    /**
     * @param type int
     * @return array
     */
    public function getMateriaCursarsSegunEstudiante($cedula) {
        $result = $this->getMateriaCursarDao()->getMateriaCursarsSegunEstudiante($cedula);
        return $result;
    }

    public function getMateriasCursarMenosIsncritas($cedula, $lapso) {
        $success = true;
        $registrosMCursar = $this->getMateriaCursarsSegunEstudiante($cedula);
        foreach ($registrosMCursar as $row) {
            $materiasCursar[] = array(
                'id_materia' => $row['smateid'],
            );
        }
        $servicioSemestre = SemestreService::getInstance($this->dbAdapter);
        $registrosMInscritas = $servicioSemestre->getMateriasInscritas($cedula, $lapso);
        $materiasInscritas = $registrosMInscritas['data'];
        $servicioDatosAcademicos = DatosAcademicosService::getInstance($this->dbAdapter);
        $datosAcademicos = $servicioDatosAcademicos->obtenerDatosAcademicosActualSegunCedula($cedula);
        $especialidad = $datosAcademicos->getSespeid();
        $servicioPensum = PensumService::getInstance($this->dbAdapter);
        $arrayMaterias = $servicioPensum->obtenerArrayMateriasSegunIdEspecialidad($especialidad);
        for ($i = 0; $i < count($materiasCursar); $i++) {
            $idMateria = $materiasCursar[$i]['id_materia'];
            $pensum = $servicioPensum->obtenerPensumSegunIdMateria($arrayMaterias, $idMateria);
            if ($pensum != null) {
                $arrayPensum = $pensum->objectToArray();
                //Llenar el campo smateid con todos los campos de pensum asociados a es id
                $materiasCursar[$i]['smateid'] = $arrayPensum;
            } else {
                $success = false;
            }
        }
        for ($i = 0; $i < count($materiasCursar); $i++) {
            $dataMateriasCursar[$i]['smateid'] = ($materiasCursar[$i]['id_materia']);
            $dataMateriasCursar[$i]['smatenombre'] = ($materiasCursar[$i]['smateid']['smatenombre']);
            $dataMateriasCursar[$i]['trayecto'] = ($materiasCursar[$i]['smateid']['trayecto']);
            $dataMateriasCursar[$i]['periodo'] = ($materiasCursar[$i]['smateid']['periodo']);
            $dataMateriasCursar[$i]['imatecreditos'] = ($materiasCursar[$i]['smateid']['imatecreditos']);
        }
        for ($i = 0; $i < count($dataMateriasCursar); $i++) {
            $idMateriaCursar = $dataMateriasCursar[$i]['smateid'];
            for ($j = 0; $j < count($materiasInscritas); $j++) {
                $idMateriaInscrita = $materiasInscritas[$j]['smateid'];
                if ($idMateriaCursar == $idMateriaInscrita) {
                    unset($dataMateriasCursar[$i]);
                } else {
                    
                }
            }
        }
        $output = UtilsArrayController::organizarOutput($success, $dataMateriasCursar, null);
        return $output; //UtilsArrayController::organizarOutput($success, $dataMateriasCursar, null);
    }

    /**
     * @param type $id
     * @return type
     */
//    public function deleteRegistro($id){
//        $materiaCursarDAO = new \Inscripcion\Model\Dao\MateriaCursarDAO($this->dbAdapter);
//        $result = $materiaCursarDAO->deleteRegistro($id);
//        return $result;
//    }

    /**
     * @param type $id
     * @param type $data
     * @return type
     */
//    public function updateRegistro(MateriaCursar $materiaCursar){
//        $materiaCursarDAO = new \Inscripcion\Model\Dao\MateriaCursarDAO($this->dbAdapter);
//        $result = $materiaCursarDAO->updateRegistro($materiaCursar);
//        //$result = $this->getMateriaCursarDao()->updateRegistro($materiaCursar);
//        return $result;
//    }

    /**
     * @param type $data
     * @return type
     */
//    public function createRegistro($data){
//        $materiaCursarDAO = new \Inscripcion\Model\Dao\MateriaCursarDAO($this->dbAdapter);
//        $result = $materiaCursarDAO->createRegistro($data);
//        return $result;
//    }
//    public function getSql(){
//        $materiaCursarDAO = new \Inscripcion\Model\Dao\MateriaCursarDAO($this->dbAdapter);
//        $result = $materiaCursarDAO->sql();
//        return $result;
//    }
}
